﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using BO;
using System.Web;

namespace WebMotel
{
    public partial class frmRelatorioCaixa : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                Page.Form.Attributes.Add("enctype", "multipart/form-data");

                if (!Page.IsPostBack)
                {
                    CXFormaPagamentoBO.Listar(ddlPesquisar_FormaPagamento);
                    UsuarioBO.Listar(ddlPesquisar_usuario);


                    ddlPesquisar_FormaPagamento.Items[0].Text = "Todos";
                    ddlPesquisar_usuario.Items[0].Text = "Todos";

                    pesquisar();
                    
                }
            }
            catch (Exception)
            {

                throw;
            }
        }

        #region Objetos
        public class temp
        {
            public int id { get; set; }
            public int? caixaID { get; set; }
            public int? comandaID { get; set; }
            public string formaPagamento { get; set; }
            public decimal? vlrRecebido { get; set; }
            public decimal vlrRecebidoAteAgora { get; set; }
            public DateTime? dtHora { get; set; }
        }
        #endregion


        public static void Redirect(string url, string target, string windowFeatures)
        {
            HttpContext context = HttpContext.Current;

            if ((String.IsNullOrEmpty(target) ||
                target.Equals("_self", StringComparison.OrdinalIgnoreCase)) &&
                String.IsNullOrEmpty(windowFeatures))
            {

                context.Response.Redirect(url);
            }
            else
            {
                Page page = (Page)context.Handler;
                if (page == null)
                {
                    throw new InvalidOperationException(
                        "Cannot redirect to new window outside Page context.");
                }
                url = page.ResolveClientUrl(url);

                string script;
                if (!String.IsNullOrEmpty(windowFeatures))
                {
                    script = @"window.open(""{0}"", ""{1}"", ""{2}"");";
                }
                else
                {
                    script = @"window.open(""{0}"", ""{1}"");";
                }

                script = String.Format(script, url, target, windowFeatures);
                ScriptManager.RegisterStartupScript(page,
                    typeof(Page),
                    "Redirect",
                    script,
                    true);
            }
        }

        #region Funções
        public int PaginaAtual //Propriedade da página atual, colocada no viewstate
        {
            get
            {
                object o = this.ViewState["PaginaAtual"];
                if (o == null || (int)o < 0)
                {
                    return 0;
                }
                else
                {
                    return (int)o;
                }
            }
            set
            {
                this.ViewState["PaginaAtual"] = value;
            }
        }
        protected void lnkProximo_Click(object sender, EventArgs e)
        {
            PaginaAtual++;
            pesquisar();
        }

        protected void lnkAnterior_Click(object sender, EventArgs e)
        {
            PaginaAtual--;
            pesquisar();
        }
        public void showMensagem(string tipo, string mensagem)
        {
            divMensagem.Attributes["class"] = "mensagem " + tipo;
            pMensagem.InnerText = mensagem;
        }
        public void setActive(string li)
        {
            divMensagem.Attributes["class"] = "mensagem ";

            if (li == "pesquisar")
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "Seta Atctive", "setDivPesquisar()", true);
            }

            else if (li == "editar")
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "Seta Atctive", "setDivEditar()", true);
            }

            else if (li == "cadastrar")
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "Seta Atctive", "setDivCadastrar()", true);
            }
        }
        public void pesquisar()
        {
            divMensagem.Attributes["class"] = "mensagem ";

            try
            {
           
                int formaPagamentoID = 0;
                if (ddlPesquisar_FormaPagamento.SelectedIndex > 0)
                    formaPagamentoID = int.Parse(ddlPesquisar_FormaPagamento.SelectedValue);


                var listagem = (from a in CXMovimentoBO.Listar(0, 0, formaPagamentoID) select a).ToList();


                #region parametros


                int usuarioID = 0;
                if (ddlPesquisar_usuario.SelectedIndex > 0)
                    usuarioID = int.Parse(ddlPesquisar_usuario.SelectedValue);

                if (usuarioID != 0)
                    listagem = (from a in listagem where a.CXCaixa.usuarioID == usuarioID select a).ToList();


                int id = 0;
                if (!string.IsNullOrEmpty(txtPesquisar_ID.Text.Trim()))
                    id = int.Parse(txtPesquisar_ID.Text);

                if(id != 0)
                    listagem = (from a in listagem where a.caixaID == id select a).ToList();



                DateTime? dtInicial = null;
                if (!string.IsNullOrEmpty(txtPesquisar_DtInicial.Text))
                    dtInicial = DateTime.Parse(txtPesquisar_DtInicial.Text);

                if(dtInicial != null)
                    listagem = (from a in listagem where a.dtHora.Value.Date >= dtInicial.Value.Date select a).ToList();

                DateTime? dtFinal = null;
                if (!string.IsNullOrEmpty(txtPesquisar_DtFinal.Text))
                    dtFinal = DateTime.Parse(txtPesquisar_DtFinal.Text);

                if (dtFinal != null)
                    listagem = (from a in listagem where a.dtHora.Value.Date <= dtFinal.Value.Date select a).ToList();

                #endregion


                List<temp> objs = new List<temp>();
                decimal saldo = 0;
                foreach (var item in listagem)
                {
                    temp ee = new temp();
                    ee.id = item.id;
                    ee.caixaID = item.caixaID;
                    ee.comandaID = item.comandaID;
                    ee.formaPagamento = item.CXFormaPagamento.descricao;
                    ee.vlrRecebido = item.vlrRecebido;

                    if(item.vlrRecebido != null)
                        saldo += decimal.Parse(item.vlrRecebido.Value.ToString());

                    ee.vlrRecebidoAteAgora = saldo;

                    ee.dtHora = item.dtHora;

                    objs.Add(ee);
                }


                Session["relatorio"] = objs.ToList();

                PagedDataSource Pgs = new PagedDataSource();
                Pgs.AllowPaging = true; //Seta paginação no PagedDataSource
                Pgs.DataSource = objs; // No caso, está setando como datasource o um objeto mas pode ser por exemplo, um DataSet.
                Pgs.PageSize = 30; //Número de registros por página

                int cont = Pgs.PageCount;

                if (PaginaAtual >= Pgs.PageCount)
                {
                    PaginaAtual--;
                }
                else if (PaginaAtual < 0)
                {
                    PaginaAtual++;
                }

                Pgs.CurrentPageIndex = PaginaAtual;
                rptListagem.DataSource = Pgs;
                rptListagem.DataBind();

                PaginaAtual++;
            }
            catch (Exception)
            {

                throw;
            }
        }
        public void limpFormCadastrar()
        {
            divMensagem.Attributes["class"] = "mensagem ";

        }
        #endregion


        #region Eventos do form
        #region Botes



        #region Tela Pesquisar
        protected void btnPesquisar_OnClick(object sender, EventArgs e)
        {
            try
            {
                pesquisar();
            }
            catch (Exception)
            {
                // Fazer o css que exibe a mensagem de erro numa janela com animação de html5
                throw;
            }
        }
        protected void btnPrint_onClick(object sender, EventArgs e)
        {
            try
            {
                string caixaID = txtPesquisar_ID.Text;
                string dtInicial = txtPesquisar_DtInicial.Text.Replace("/","-");
                string dtFinal = txtPesquisar_DtFinal.Text.Replace("/", "-");
                string usuario = ddlPesquisar_usuario.SelectedItem.Text;
                string formaPagamento = ddlPesquisar_FormaPagamento.SelectedItem.Text;

                string url = "/print/printCaixaRelatorio.aspx?";
                url += "caixaID=" + caixaID  + "&";
                url += "dtInicial=" + dtInicial + "&";
                url += "dtFinal=" + dtFinal + "&";
                url += "usuario=" + usuario + "&";
                url += "formaPagamento=" + formaPagamento;

                Redirect(url, "_blank", "HEIGHT=320,WIDTH=820,top=50,left=50,toolbar=no,scrollbars=no,resizable=no");
            }
            catch (Exception)
            {
                // Fazer o css que exibe a mensagem de erro numa janela com animação de html5
                throw;
            }
        }
        
        #endregion

        #endregion

        #endregion
    }
}